package com.may.resttemplate.utils;

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;

import java.util.Map;

/**
 *
 * @program: template
 * @description:
 * @author: Bobby.Ma
 * @create: 2020-06-12 15:47
 **/
public class HttpEntityUtil{

    /**
     * 无请求头和请求体参数的
     * @return
     */
    public static HttpEntity<?> setEntity(){
        HttpHeaders headers = new HttpHeaders();
        // 设置请求类型
        headers.setContentType(MediaType.APPLICATION_JSON);
        // 封装实体
        return new HttpEntity<>(headers);
    }

    /**
     * 请求头是单个参数的
     * @param headerName
     * @param headerValue
     * @return
     */
    public static HttpEntity<?> setEntity(String headerName,String headerValue){
        HttpHeaders headers = new HttpHeaders();
        //设置请求头参数
        headers.add(headerName,headerValue);
        // 设置请求类型
        headers.setContentType(MediaType.APPLICATION_JSON);
        // 封装实体
        return new HttpEntity<>(headers);
    }

    /**
     * 请求头有多个参数的
     * @param headParam
     * @return
     */
    public static HttpEntity<?> setEntity(Map<String,String> headParam){
        HttpHeaders headers = new HttpHeaders();
        //设置请求头参数
        headParam.forEach(headers::add);
        // 设置请求类型
        headers.setContentType(MediaType.APPLICATION_JSON);
        // 封装实体
        return new HttpEntity<>(headers);
    }

    /**
     * 只有请求体参数的
     * @param bodyParam
     * @param <T>
     * @return
     */
    public static <T> HttpEntity<T> setEntity(T bodyParam){
        HttpHeaders headers = new HttpHeaders();
        // 设置请求类型
        headers.setContentType(MediaType.APPLICATION_JSON);
        // 封装实体
        return new HttpEntity<>(bodyParam,headers);
    }

    /**
     * 单个请求头参数，带请求体参数
     * @param headerName
     * @param headerValue
     * @param bodyParam
     * @param <T>
     * @return
     */
    public static <T> HttpEntity<T> setEntity(String headerName,String headerValue, T bodyParam){
        HttpHeaders headers = new HttpHeaders();
        //设置请求头参数
        headers.add(headerName,headerValue);
        // 设置请求类型
        headers.setContentType(MediaType.APPLICATION_JSON);
        // 封装实体
        return new HttpEntity<>(bodyParam,headers);
    }

    /**
     * 多个请求头参数，带请求体参数
     * @param headParam
     * @param bodyParam
     * @param <T>
     * @return
     */
    public static <T> HttpEntity<T> setEntity(Map<String,String> headParam, T bodyParam){
        HttpHeaders headers = new HttpHeaders();
        //设置请求头参数
        headParam.forEach(headers::add);
        // 设置请求类型
        headers.setContentType(MediaType.APPLICATION_JSON);
        // 封装实体
        return new HttpEntity<>(bodyParam,headers);
    }
}
